#include<stdio.h>
#include<unistd.h>
#include<pthread.h>

int ticket=100;
void* Scalper(void*arg)
{
  pthread_mutex_t *mutex=(pthread_mutex_t*)arg;
  while(1)
  {
    usleep(10);
    //抢票之前加锁
    pthread_mutex_lock(mutex);
    if(ticket>0)
    {
      printf("%p：我抢到了%d号票\n",pthread_self(),ticket);
      ticket--;
      //抢完票之后解锁
      pthread_mutex_unlock(mutex);
    }
    else{
      printf("%p：票卖完了，我的工作结束了\n",pthread_self());
      //当没有抢到票的时候也需要解锁
      //上述if语句不执行的时候，如果不解锁，则其他线程都将被阻塞
      pthread_mutex_unlock(mutex);
      break;
    }
  }
}
int main()
{
  pthread_t tid[4];
  pthread_mutex_t mutex;

  //初始化互斥锁
  pthread_mutex_init(&mutex,NULL);

  //创建4个线程 进行抢票
  for(int i=0;i<4;++i)
  {
    int ret=pthread_create(&tid[i],NULL,Scalper,&mutex);
    if(ret!=0)
    {
      perror("pthread_create error");
      return -1;
    }
  }

  //等待线程退出，抢完票退出
  for(int i=0;i<4;++i)
  {
    pthread_join(tid[i],NULL);
  }
  //所有线程结束后，销毁互斥锁
  pthread_mutex_destroy(&mutex);
  return 0;
}
